Modern computer networks frequently face the challenge of needing to share a single resource among multiple entities. One example of this is switching data traffic in a switch that is part of a computer network. In such a network switch, data traffic received from a plurality of input ports may need to be sent out through a particular output port. Directing such flows of traffic raises challenges such as determining which port goes next, and how much the port may send, etc. Such tasks are often performed by a scheduler. Scheduling may also involve taking Quality of Service considerations into account for different flows. Priority scheduling can involve considering a fair distribution of bandwidth resources as well as considering QoS guarantees. Changing weights can be used to implement priority scheduling.
A variety of scheduling algorithms have been developed to assist with the process of routing data traffic within a switch. Unfortunately, many of the algorithms can take a long time to compute. The longer computation time can slow down processing speeds. For example, if a computation takes more than one clock cycle to complete, the opportunity to send data traffic through the output port for one or more clock cycles can be lost. This result may not be acceptable in high performance networks with a large throughput. To avoid this result, the entire switch system may be designed to operate at a slower frequency to insure that a selection of a next flow for transmission can always occur within one clock cycle. But having a slower device speed is also undesirable, and frequently unacceptable, in high performance networks.
Accordingly, various embodiments of the present application seek to improve upon mechanisms and techniques for implementing schedulers to address these and other related challenges that arise when a number of entities seek access to a single shared resource.